#ifndef CUDA_MANAGER_H
#define CUDA_MANAGER_H

#ifdef __USE_CUDA_WARD_SENSE__

#include <memory>
#include <mutex>
#include "inference.h"
#include "video.h"

class CudaManager {
public:
    // 获取 CudaManager 实例
    static CudaManager& getInstance();

    // 禁止拷贝和赋值
    CudaManager(const CudaManager&) = delete;
    CudaManager& operator=(const CudaManager&) = delete;

    // 模型加载
    bool loadModel(const DL_INIT_PARAM& param);

    // 使用已加载的模型进行推理
    std::vector<DL_RESULT> processWithCuda(MatWrapper& mat_wrapper);

    // 获取model
    myModel* getModel() { return model.get(); }

private:
    // 构造函数
    CudaManager();

    // CUDA 模型
    std::unique_ptr<myModel> model;

    // 用于保护 CUDA 资源的互斥锁
    std::mutex modelMutex;
};

#endif // __USE_CUDA_WARD_SENSE__
#endif // CUDA_MANAGER_H
